package br.com.dallasmotopecas.conhecimento.relatorio.vendedor.managerbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.dallasmotopecas.comum.cliente.vo.ClienteDadosDetalheVo;
import br.com.dallasmotopecas.comum.funcionario.vo.FuncionarioVo;
import br.com.dallasmotopecas.conhecimento.relatorio.vendedor.controller.VendaMensalController;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.ConsultarObjetoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;

@ManagedBean(name="managerVendaMensalBean")
@ViewScoped
public class ManagerVendaMensalBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	private List<ClienteDadosDetalheVo> lstClienteDadosDetalhe;
	private ClienteDadosDetalheVo clienteDadosDetalheVo;
	private List<FuncionarioVo> listaFuncionario;
	
	public ManagerVendaMensalBean ()
	{
		
	}
	
	@PostConstruct
	public void init()
	{
		try
		{
			if (!isUsuarioLogado())
			{
				redirecionarPagina("/Index.jsf");
				return;
			}
			processaPermissaoUsuario(getUsuarioLogado());
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}
	
	@PreDestroy
	public void destroy()
	{
		getLstClienteDadosDetalhe().clear();
		setLstClienteDadosDetalhe(null);
		getListaFuncionario().clear();
		setListaFuncionario(null);
		setClienteDadosDetalheVo(null);
	}	

	public List<ClienteDadosDetalheVo> getLstClienteDadosDetalhe()
	{
		if (lstClienteDadosDetalhe == null) lstClienteDadosDetalhe = new ArrayList<ClienteDadosDetalheVo>();
		
		return lstClienteDadosDetalhe;
	}

	public void setLstClienteDadosDetalhe(List<ClienteDadosDetalheVo> lstClienteDadosDetalhe)
	{
		this.lstClienteDadosDetalhe = lstClienteDadosDetalhe;
	}
	
	public ClienteDadosDetalheVo getClienteDadosDetalheVo()
	{
		if (clienteDadosDetalheVo == null) clienteDadosDetalheVo = new ClienteDadosDetalheVo();
		
		return clienteDadosDetalheVo;
	}

	public void setClienteDadosDetalheVo(ClienteDadosDetalheVo clienteDadosDetalheVo)
	{
		this.clienteDadosDetalheVo = clienteDadosDetalheVo;
	}
	
	public List<FuncionarioVo> getListaFuncionario()
	{
		if (listaFuncionario == null) listaFuncionario = new ArrayList<FuncionarioVo>();
		
		return listaFuncionario;
	}

	public void setListaFuncionario(List<FuncionarioVo> listaFuncionario)
	{
		this.listaFuncionario = listaFuncionario;
	}

	private void limparDados()
	{
		getLstClienteDadosDetalhe().clear();
		setLstClienteDadosDetalhe(new ArrayList<ClienteDadosDetalheVo>());
		getListaFuncionario().clear();
		setListaFuncionario(new ArrayList<FuncionarioVo>());
		setClienteDadosDetalheVo(new ClienteDadosDetalheVo());
	}
	
	public void abrirFiltro()
	{
		VendaMensalController vendaMensalController = null;
		try
		{
			limparDados();
			vendaMensalController = new VendaMensalController(getContexto());
			vendaMensalController.carregarListaFuncionario(getListaFuncionario());
			abrirModal("diagFiltro");
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConsultarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (vendaMensalController != null)
			{
				vendaMensalController.close();
				vendaMensalController = null;
			}
		}
	}
	
	public void carregarDados()
	{
		VendaMensalController vendaMensalController = null;
		try
		{
			vendaMensalController = new VendaMensalController(getContexto());
			vendaMensalController.vendasPorPeriodo(getLstClienteDadosDetalhe(), getClienteDadosDetalheVo());
			fecharModalSemMensagem("diagFiltro");
		}
		catch (ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (vendaMensalController != null)
			{
				vendaMensalController.close();
				vendaMensalController = null;
			}
		}
	}
	
	public void sair()
	{
		try
		{
			redirecionarPagina("/view/conhecimento/Home.jsf");
		}
		catch (DirecionamentoPaginaException e)
		{
			e.printStackTrace();
		}
	}
}
